import os
from fastapi import APIRouter,Path,Query,Cookie,Header,status,Form,File,UploadFile
from typing import Optional,List,Union,Any
from pydantic import BaseModel,Field,EmailStr

app05 = APIRouter()

@app05.get("/")
async def index():
    return {
        "name":os.path.basename(__file__)
    }

@app05.post("/small_file")
async def small_file(file:bytes = File(...)):
    """
    File 仅适用于比较小的文件，它会直接读取到内存中操作，过大会爆内存。
    """
    return {
        "file_size":len(file)
    }

@app05.post("/small_files")
async def small_file(files:List[bytes] = File(...)):
    """
    File 仅适用于比较小的文件，它会直接读取到内存中操作，过大会爆内存。
    通过List设置可以支持多个文件
    """
    return [{"file_size": len(f)} for f in files]

@app05.post("/upload_files")
async def upload_files(files:List[UploadFile] = File(...)):
    """
    UploadFile
    - 文件存储在内存中，超过阈值会保存到磁盘，不会爆内存
    - 适合大的图片、视频文件
    - 可以获取到文件的元数据 如 文件名、创建时间等
    - 有文件对象的异步接口
    """
    for f in files:
        contents = await f.read()
        print(f.filename,"\n",contents)
    return [
        {"file_name":f.filename,"content_type":f.content_type } for f in files
    ]